import re

from django.views import View
# 导入返回响应
from SaaSDevelTool.data_return_response import create_response
# 导入错误信息装饰器
from SaaSDevelTool.data_return_response import error_message_detection
# 导入分页器
from SaaSDevelTool.data_operation import paging_tool_join


class SaaSDevelApiErrQuery(View):
    @error_message_detection
    def get(self, request):
        """
        params :
            page_number 获取当前页码
            page_size   获取每页条数
            err_code    获取错误编码

        return :
            err_data 错误信息值
            data_count 错误信息总条数
            page_number 获取当前页码
            page_size   获取每页条数

        explain:
            根据分页参数与错误信息值进行获取SaaS平台的API错误信息。
        """
        page_number = request.GET.get("page_number")  # 获取当前页码
        page_size = request.GET.get("page_size")  # 获取每页条数
        err_code = request.GET.get("err_code")  # 获取错误编码

        # 判断必传参数是否完整
        if not all([page_size, page_number]):
            return create_response(code=400, msg="页面编号与每页数据条数为必传参数。")

        # 判断参数是否为int类型
        try:
            page_number = int(page_number)
            page_size = int(page_size)
        except Exception as err:
            return create_response(code=400, msg="页面编号与每页数据条数类型必须为整数。")

        # 判断错误编码(如果值存在)
        if err_code:
            err_code_format = r'^\d{1,19}$'
            # 使用正则判断
            if not re.match(err_code_format, err_code):
                # 未通过判断的响应
                return create_response(code=400, msg="")
            # 定义查询语句
            where_sql = """ WHERE  err_code = '{}' """.format(err_code)
        else:
            where_sql = """"""

        # 定义sql语句
        query_base_info_err_log_table_sql = """
            SELECT 
                err_code,
                err_api_name,
                err_urls,
                err_time,
                err_data
            FROM 
                databases_saas_development_polatform.base_info_err_log_table {}
            ;""".format(where_sql)
        # 获取分页器的值
        query_base_info_err_log_table_data = paging_tool_join(query_base_info_err_log_table_sql, page_number, page_size)
        # 返回响应
        return create_response(code=200, msg="", data=query_base_info_err_log_table_data)
